[小ネタ] AWS WAFv2が設定されている/いない CloudFront ディストリビューションの一覧を取得する(AWS CLI)
AWS事業本部@福岡オフィスの梶原です。WAFv1まではlist-distributions-by-web-acl-id を使えばいいじゃないと思ってました。
こんな感じです。
WebACLId="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX" aws cloudfront list-distributions-by-web-acl-id --web-acl-id $WebACLId
https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-distributions-by-web-acl-id.html
WAF v1であれば、このコマンドで問題なかったのですが、WAFv2に移行した際に、現時点(2020/08/27)ではWAFv2は対応していないようで取得できませんでした。 すでに、Issueが上がっていましたので、近いうちに対応されるのではないかなと思います。
'cloudfront list-distributions-by-web-acl-id' only works for wafv1 acls #5418 https://github.com/aws/aws-cli/issues/5418
対応されるまでのつなぎとなってしまいますが、以下のコマンドで同じような結果が得られますので、必要な方はご活用いただければと思います。
WAFv2が設定されているCloudFrontディストリビューション(JSON)
WebACLId="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX" aws cloudfront list-distributions \ --query "DistributionList.Items[?contains(WebACLId,'$WebACLId')]" \ --output json
[ { "Id": "XXXXXXXXXXX", "ARN": "arn:aws:cloudfront::123456789012:distribution/XXXXXXXXXXX", "Status": "Deployed", <<省略>> }, "WebACLId": "arn:aws:wafv2:us-east-1:123456789012:global/webacl/wafv2-webacl/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX", <<省略>>
WAFv2が設定されているCloudFrontディストリビューション(TABLE形式(出力項目絞り込みあり))
WebACLId="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX" aws cloudfront list-distributions \ --query "DistributionList.Items[?contains(WebACLId,'$WebACLId')].[Id, Aliases.Items|[0], WebACLId]" \ --output table
------------------------------------------------------------------------------------------------------------------------------------------------------+ | ListDistributions | +----------------+---------------------------+--------------------------------------------------------------------------------------------------------+ | AAAAAAAAAAAAA | www.exsample.com | arn:aws:wafv2:us-east-1:123456789012:global/webacl/wafv2-webacl/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX | <<省略>>
WAFv2が設定されていないCloudFrontディストリビューションのリスト(JSON)
aws cloudfront list-distributions \ --query "DistributionList.Items[?WebACLId=='']"
WAFv2が設定されていないCloudFrontディストリビューションのリスト(TABLE形式(出力項目絞り込みあり))
aws cloudfront list-distributions \ --query "DistributionList.Items[?WebACLId==''].[Id, Aliases.Items|[0], WebACLId]" \ --output table
--------------------------------------------------------------- | ListDistributions | +-----------------+---------------------------------------+---+ | XXXXXXXXXXX | www.hogehoge.com | | +-----------------+---------------------------------------+---+
CloudFront用のWAFv2 ACL一覧
ちなみに、絞り込みに必要なAWS WAFのACL ID は以下で取得できますので合わせてご活用ください
aws wafv2 list-web-acls --scope=CLOUDFRONT --region=us-east-1 \ --query "WebACLs[].[Name, Id]" \ --output table
------------------------------------------------------------------------- | ListWebACLs | +------------------------------+----------------------------------------+ | wafv2-webacl-prd | XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX | | wafv2-webacl-dev | XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX | +------------------------------+----------------------------------------+
参考情報
https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-distributions-by-web-acl-id.html
'cloudfront list-distributions-by-web-acl-id' only works for wafv1 acls #5418 https://github.com/aws/aws-cli/issues/5418